package br.com.statizo.financeiro.web.mvc;

import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import br.com.statizo.financeiro.domain.entity.impl.Banco;
import br.com.statizo.financeiro.domain.entity.impl.CartaoCredito;
import br.com.statizo.financeiro.domain.entity.impl.ContaCorrente;
import br.com.statizo.financeiro.domain.entity.impl.Lancamento;
import br.com.statizo.financeiro.domain.entity.impl.TipoLancamento;
import br.com.statizo.financeiro.domain.enums.GrupoLancamento;

@Controller
@RequestMapping("/rest/banks")
public class BancoListController extends StatizoAbstractController{
	
	
	private List<CartaoCredito> cartoes = new ArrayList<CartaoCredito>();
	private List<Banco> bancos = new ArrayList<Banco>();
	private List<ContaCorrente> contas = new ArrayList<ContaCorrente>();
	private List<Lancamento> lancamentos = new ArrayList<Lancamento>();
	private List<TipoLancamento> tipos = new ArrayList<TipoLancamento>();
	
	
	public BancoListController() {
    	createBancos();
    	createContas();
    	createCartoes();
    	createTiposLancamento();
    	createLancamentos();
	}
	
    @RequestMapping(method=RequestMethod.GET, produces="application/json")
	public @ResponseBody Data listarBancos(){
    	 return createData( lancamentos );
    }
    
    
    
    
    
    
    
    
    
    
    
    
    protected void createBancos(){
		Banco banco = null;
		for(int i = 0; i<20; i++){
	    	banco = new Banco();
	    	banco.setCodigo( "" + i );
	    	banco.setNome("Banco " + i);
	    	this.bancos.add( banco );
		}
    }

    protected void createContas(){
    	ContaCorrente conta = null;
    	for(int i = 0; i<2; i++){
    		conta = new ContaCorrente();
    		conta.setAgencia("AG " + i);
    		conta.setBanco( bancos.get(i) );
    		conta.setNumero("NUM "+i);
    		this.contas.add(conta);
    	}
    	
    }
    
    protected void createCartoes(){
    	for(int i = 0; i<10; i++){
    		CartaoCredito cartao = new CartaoCredito();
    		cartao.setNome(" Cartão " + bancos.get( i ).getNome() );
    		cartao.setConta( i % 2 == 0 ? contas.get(0) : contas.get(1));
    		this.cartoes.add(cartao);
    	}
    }
    
    protected void createTiposLancamento(){
    	
    	int grupo = 0;
    	for(int i = 0; i<10; i++){
    		TipoLancamento tipo = new TipoLancamento();
    		if(grupo > 5){
    			grupo = 0;
        		tipo.setGrupo(GrupoLancamento.values()[grupo]);
    		}else{
        		tipo.setGrupo(GrupoLancamento.values()[grupo]);    			
    			grupo ++;
    		}
    		this.tipos.add( tipo );
    	}
    	
    }
    
    protected void createLancamentos(){
    	
    	for(int i = 0; i<10; i++){
    		
    		Lancamento lancamento = new Lancamento();
    		lancamento.setId(new Long(i));
    		lancamento.setCartao( cartoes.get(i) );
    		lancamento.setConta( i % 2 == 0 ? contas.get(0) : contas.get(1));
    		lancamento.setValor(2.5 + i);
    		lancamento.setDataDivida(new GregorianCalendar(2014, 1, i + 1));
    		lancamento.setDataPagamento(new GregorianCalendar(2014, 1, i + 2));
    		lancamento.setTipoLancamento( tipos.get(i) );
    		lancamento.setObservacao("Observação " + i);
    		lancamento.setDescricao("LOREM IPSUN BLÁ " + i);
    		this.lancamentos.add(lancamento);
    		
    	}
    	
    }
    
    
}
